package com.sample.servlet;

import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.arnx.jsonic.JSON;

import com.sample.info.OutputInfo;

public class HttpJsonServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

	    System.out.println("HttpStandardServlet Start doGET JSON");

	    // 返却オブジェクト作成
	    OutputInfo output = new OutputInfo();
	    output.setDate(new Date());
	    output.setName("Serializable Output Object");
	    output.getHash().put("params1", "Output1");
	    output.getHash().put("params2", "Output2");
	    output.setNum(output.getNum() + 1);
	    output.getList().add("Hoge1");
	    output.getList().add("Hoge2");

	    // JSON文字列を作成(Pretty:trueで見易くする)
	    String jsonTxt = JSON.encode(output, true);

	    resp.setContentType("text/plain; charset=UTF-8");
	    resp.getWriter().println("①OutputInfoをJSONにエンコードしてPrrety=trueで表示\n");
	    resp.getWriter().println(jsonTxt);
	    resp.getWriter().println("\n");

	    // 以下、デコード検証
	    // こうやるとCastでこける(スーパクラスでデコードしてもCastできない)
//	    OutputInfo out1 = (OutputInfo) JSON.decode(jsonTxt, Object.class);
//      OutputInfo out2 = (OutputInfo) JSON.decode(jsonTxt);

	    // 結論：スーパークラスでデコードできるデコード後のスーパークラスからは
	    // DownCastできない
	    OutputInfo out3 = JSON.decode(jsonTxt, OutputInfo.class);

	    resp.getWriter().println("②エンコードしたJSONをOutputInfoにデコードしてtoString()した結果\n");
	    resp.getWriter().println(out3.toString());

	    System.out.println("HttpStandardServlet Start doPOST JSON");
	}

}
